home *** CD-ROM | disk | FTP | other *** search
- /*
-
- GetEntries.c - Read all selected Files from all sources
-
- Does support a command template with "Name,..." as well
- and does use then only the commandline names.
-
- In case of collecting files from listers it does store
- for each entry the lister and entry pointer too (do not
- forget to free it later...:) )
-
- */
-
- #include <proto/dos.h>
- #include <proto/exec.h>
-
- #define _DOPUS_MODULE_DEF
- #include <dopus/modules.h>
-
- // strcpy() is needed
- #define SDI_TO_ANSI
- #include <sdi_std.h>
-
- #include <exec/memory.h>
-
- typedef struct NodeData
- {
- APTR lister;
- APTR entry;
- };
-
- extern APTR mempool;
-
- /********************************************************************/
- // Prototypes
-
- // the function you should call
- Att_List *GetFiles( IPCData *ipc, FuncArgs *fargs, DOpusCallbackInfo *dc );
-
- Att_List *GetSourceEntries( IPCData *ipc, DOpusCallbackInfo *dc );
- Att_List *GetArgNames( long farg );
-
- /********************************************************************/
-
- Att_List *GetFiles( IPCData *ipc, FuncArgs *fargs, DOpusCallbackInfo *dc )
- {
- Att_List *entrylist = NULL;
-
- if( fargs && fargs->FA_Arguments[0] )
- entrylist = GetArgNames( fargs->FA_Arguments[0] );
-
- if( IsListEmpty((struct List *) entrylist) )
- {
- Att_RemList( entrylist, NULL );
- entrylist = GetSourceEntries( ipc, dc );
- }
-
- if( IsListEmpty((struct List *) entrylist) )
- {
- Att_RemList( entrylist, NULL );
- return NULL;
- }
-
- return entrylist;
- }
-
- /********************************************************************/
-
- Att_List *GetSourceEntries( IPCData *ipc, DOpusCallbackInfo *dc )
- {
- ULONG num;
- APTR entry, handle;
- char buffer0[256], buffer1[256];
- struct NodeData *nd;
- Att_List *entrylist;
-
- entrylist = Att_NewList( LISTF_POOL );
-
- handle = dc->dc_GetSource( IPCDATA(ipc), buffer0 );
-
- do
- {
- while( (num = dc->dc_ExamineEntry((entry = dc->dc_GetEntry(IPCDATA(ipc))), EE_NAME)) )
- {
- if( (nd=AllocMemH(mempool, sizeof(struct NodeData))) )
- {
- nd->lister = handle;
- nd->entry = entry;
- AddPart( strcpy(buffer1, buffer0), (STRPTR) num, 256 );
- Att_NewNode( entrylist, buffer1, (ULONG) nd, NULL );
- }
-
- dc->dc_EndEntry( IPCDATA(ipc), entry, TRUE );
- }
- }
- while( (handle = dc->dc_NextSource(IPCDATA(ipc), buffer0)) );
-
- return entrylist;
- }
-
- /********************************************************************/
-
- Att_List *GetArgNames( long farg )
- {
- Att_List *entrylist;
- ULONG *argument_names;
-
- argument_names = (ULONG *) farg;
-
- entrylist = Att_NewList( LISTF_POOL );
-
- do
- {
- Att_NewNode( entrylist, (STRPTR) *(argument_names), NULL, NULL );
- }
- while( *++argument_names );
-
- return entrylist;
- }
-
- /********************************************************************/
-
-